package com.rem.rabbitmq.ee.Idelay;

import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rem.rabbitmq.ee.RabbitMqUtils;

import java.util.Scanner;

/**
 * 延迟队列 -死信队列中ttl的实现
 * 设置ttl过期两种方法
 * ** 在队列上设置过期时间  arguments.put("x-message-ttl", 10000)  一旦消息过期就被丢弃，如果配置了死信队列就丢到死信队列
 * ** 在消息上设置过期时间  new AMQP.BasicProperties().builder().expiration("10000").build()  如果不设置代表永不过期；如果设置为0代表直接发送给消费者，否则丢弃消息
 *
 * @author Rem
 * @date 2021-12-27
 */

public class DelayProducer {


    public static void main(String[] args) throws Exception {

        Channel channel = RabbitMqUtils.getChannel();
        channel.exchangeDeclare(RabbitMqUtils.EXCHANGE_NORMAL_TTL, BuiltinExchangeType.DIRECT);

        System.err.println("开始发送消息...");
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            String message = scanner.next();

            /**
             * 发送消息
             * 设置消息过期时间 ms
             */
            AMQP.BasicProperties properties = new AMQP.BasicProperties().builder().expiration("8000").build();
            channel.basicPublish(RabbitMqUtils.EXCHANGE_NORMAL_TTL, RabbitMqUtils.ROUTING_KEY_NORMAL_TTL, properties, message.getBytes());
            System.err.println("发送消息完毕" + message);
        }

    }


}
